package com.woniuxy.yoga.product.web.controller;


import cn.hutool.core.bean.BeanUtil;
import com.woniuxy.yoga.commons.core.model.PageInfo;
import com.woniuxy.yoga.commons.core.model.Result;
import com.woniuxy.yoga.product.dao.model.ProductType;
import com.woniuxy.yoga.product.model.dto.NormalProductTypeDTO;
import com.woniuxy.yoga.product.model.dto.ProductTypeByIdDTO;
import com.woniuxy.yoga.product.model.form.AddProductTypeForm;
import com.woniuxy.yoga.product.model.form.QueryProductTypeForm;
import com.woniuxy.yoga.product.model.param.AddProductTypeParam;
import com.woniuxy.yoga.product.model.param.QueryProductTypeParam;
import com.woniuxy.yoga.product.permission.Permission;
import com.woniuxy.yoga.product.service.service.ProductTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 * 产品类型表 前端控制器
 * </p>
 *
 * @author 韦用文,刘存益,郎腾霄
 * @since 2023年12月01日
 */
@RestController
@RequestMapping("/productType")
@Api(tags = "产品类型服务相关业务接口")
@Validated
public class ProductTypeController {

    @Autowired
    private ProductTypeService productTypeService;

    /**
     * 新增产品类型
     * @param addProductTypeForm
     * @return
     */
    @PostMapping("/addProductType.api")
    @ApiOperation("新增产品类型接口")
    @Permission(resources = {"/product/productType/addProductType.api"})
    public Result<?> addProductType(@Valid @RequestBody AddProductTypeForm addProductTypeForm){
        productTypeService.addProductType(BeanUtil.toBean(addProductTypeForm, AddProductTypeParam.class));
        return Result.getResult().setMessage("新增产品类型成功");
    }

    /**
     * 上架产品类型
     * @param productTypeId
     * @return
     */
    @GetMapping("/modifyProductType/{productTypeId}.api")
    @ApiOperation("上架产品类型接口")
    @Permission(resources = {"/product/productType/modifyProductType.api"})
    public Result<?> modifyProductType(@Valid @NotNull @PathVariable("productTypeId") Integer productTypeId){
        productTypeService.modifyProductType(productTypeId);
        return Result.getResult().setMessage("上架产品类型成功");
    }

    /**
     * 删除产品类型
     * @param productTypeId
     * @return
     */
    @GetMapping("/deleteProductType/{productTypeId}.api")
    @ApiOperation("删除产品类型接口")
    @Permission(resources = {"/product/productType/deleteProductType.api"})
    public Result<?> deleteProductType(@Valid @NotNull @PathVariable("productTypeId") Integer productTypeId){
        productTypeService.deleteProductType(productTypeId);
        return Result.getResult().setMessage("删除产品类型成功");
    }

    /**
     * 查询所有产品类型
     * @param queryProductTypeForm
     * @return
     */
    @PostMapping("/queryProductType.api")
    @ApiOperation("平台查询所有产品类型接口")
    @Permission(resources = {"/product/productType/queryProductType.api"})
    public Result<PageInfo> queryProductType(@RequestBody QueryProductTypeForm queryProductTypeForm){
        PageInfo pageInfo = productTypeService.queryProductType(BeanUtil.toBean(queryProductTypeForm, QueryProductTypeParam.class));
        return Result.getResult(PageInfo.class).setMessage("平台查询所有产品类型成功").setData(pageInfo);
    }

    /**
     * 商家查询上架产品类型
     * @return
     */
    @GetMapping("/queryNormalProductTypeDTO.bu")
    @ApiOperation("商家查询上架产品类型接口")
    public Result<List<NormalProductTypeDTO>> queryNormalProductTypeDTO(){
        List<NormalProductTypeDTO> normalProductTypeDTOS = productTypeService.queryNormalProductTypeDTO();
        return Result.getListResult(NormalProductTypeDTO.class).setMessage("商家查询上架产品类型成功").setData(normalProductTypeDTOS);
    }

    /**
     * 用户查询上架产品类型
     * @return
     */
    @GetMapping("/userQueryNormalProductTypeDTO.us")
    @ApiOperation("用户查询上架产品类型接口")
    public Result<List<NormalProductTypeDTO>> userQueryNormalProductTypeDTO(){
        List<NormalProductTypeDTO> normalProductTypeDTOS = productTypeService.userQueryNormalProductTypeDTO();
        return Result.getListResult(NormalProductTypeDTO.class).setMessage("用户查询上架产品类型成功").setData(normalProductTypeDTOS);
    }

    /**
     * 根据产品类型ID查询产品类型
     * @param productTypeId
     * @return
     */
    @GetMapping("/getById/{productTypeId}")
    @ApiOperation("产品类型ID查询产品类型接口")
    public Result<ProductTypeByIdDTO> getById(@Valid @NotNull(message = "产品类型ID不能为空") @PathVariable("productTypeId") Integer productTypeId){
        //获取数据
        ProductType productType = productTypeService.getById(productTypeId);
        //对象转换
        ProductTypeByIdDTO productTypeByIdDTO = BeanUtil.toBean(productType, ProductTypeByIdDTO.class);
        //返回数据
        return Result.getResult(ProductTypeByIdDTO.class).setMessage("根据产品类型ID查询产品类型成功").setData(productTypeByIdDTO);
    }
}

